<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分析生命周期</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <!-- 
        生命周期流程
        1：beforeCreate() vm创建之前 数据代理 和数据监测还没有开始 vm._data 不存在
        2：created() vm创建完毕 初始化数据监测 和数据代理 通过vm可以访问到数据
        //分析有没有el 或者 vm.$mount（这里走下一步有一点区别 有el out） ,有就编译模板生产虚拟dom(内存中)
        3：beforeMount() 此时页面呈现的是未经编译的模板，下一步要进行模板替换虚拟dom转化为真实don插入页面
        (故此处对dom的操作都不奏效)
        4：重要：Mounted() 已经完成模板编译，对dom操作有效，但尽量避免。
        此处一般进行，开启定时器，发送网络请求，订阅消息，绑定自定义事件等初始化操作
        5：此处挂载后会有个监视更新操作，when data changes 触发beforeUpdate()此时数据是新的，但页面旧的，
        6：updated 模板编译=> 页面和数据同步
        7：beforeDestroy() 销毁之前（）取消定时器 取消订阅消息，解绑定义事件，首位工作，不要操作数据，都要消除了
        8: destroyed() 已经销毁 什么都没了。
     -->
    <div id="root">
        {{n}}
        <button @click="destroy"> n ++</button>
    </div>
    
</body>
<script type="text/javascript">
    Vue.config.productionTip = false //以阻止 vue 在启动时生成生产提示。
    //创建Vue
    const vm = new Vue({
        el:'#root', 
        data:{
            n:1
        },
        methods:{
            destroy(){
                console.log('buy');
                this.$destroy()
            }
        },
        beforeCreate(){
            //这里的this 是没有创建好的vm 里面没有做数据监测和数据代理
            console.log('beforeCreate')
        },
        created(){
            //this 创建好的vm 可以访问data 数据监测和数据代理
            console.log('beforeCreate')
        },
        beforeMount(){
            //挂载之前，之后要做模板编译，把虚拟dom存在内存中，下一步替换页面
            console.log('beforeMount')
        },
        mounted(){
            //替换页面完毕，此处做发送请求，开始定时器，订阅消息
            console.log('mounted')
            this.timer = setInterval(() => {
                console.log('mounted')
            }, 3000);
        },
        beforeUpdate(){
            //替换页面完毕，此处做发送请求，开始定时器，订阅消息
            console.log('beforeUpdate')
        },
        updated(){
            //替换页面完毕，此处做发送请求，开始定时器，订阅消息
            console.log('updated')
        },
        beforeDestroy(){
            console.log('beforeDestroy')
        },
        destroyed(){
            console.log('destroyed')
            clearInterval(this.timer)
        }


    })

</script>
</html>